"""
数据驱动, 在pytest中的实现十分简单, 并且通用具备了pytes的特色, 那就是灵活

大家可能对 数据驱动 这个概念比较模糊, 其实我说一个场景, 大家就明白了.

有一个数据文件, 需要对里面的文件的每一行数据, 进行拆分, 每一行即是一条用例
这个文件的数据动态的, 行数/内容, 也许每天都不同
这个时候, 如果我们按照之前那样, 编写一个个test函数, 就无法实现这个需求

数据驱动, 就是为了解决类似于这样的问题

这里我们需要使用到 @pytest.mark.parametrize
"""
import allure

## 基本使用

# import pytest
#
# # 模拟文件内容, 将文件内容按行拆分
# fileData = [
#     "data1",
#     "data2",
#     "data3",
#     "data4",
# ]
#
# class TestCase():
#
#     @pytest.mark.parametrize('data', fileData)  # 声明参数名以及确定被测数据
#     def test_a(self, data):  # 申明同名函数data
#         print(f"data: {data}")
#         assert data != 'data3'
#
# if __name__ == '__main__':
#     pytest.main(['-s', '-v', __file__])  # 加上 -m 控制需要运行的标签用例

## 多参数使用

# import pytest
#
# # 模拟文件内容, 将文件内容按行拆分
# fileData = [
#     (1, 2),
#     (2, 3),
#     (3, 4),
# ]
#
# class TestCase():
#
#     @pytest.mark.parametrize('a, b', fileData)
#     def test_a(self, a, b):
#         print('\n')
#         print(f"data --> a: {a}")
#         print(f"data --> b: {b}")
#         assert 1
#
# if __name__ == '__main__':
#     pytest.main(['-s', '-v', __file__])  # 加上 -m 控制需要运行的标签用例

## 驱动测试类

# import pytest
#
# # 模拟文件内容, 将文件内容按行拆分
# fileData = [
#     (1, 2),
#     (2, 3),
#     (2, 4),
# ]
#
# @pytest.mark.parametrize('a, b', fileData)
# class TestCase():
#
#     def test_a(self, a, b):
#         print('\n')
#         print(f"data --> a: {a}")
#         print(f"data --> b: {b}")
#         assert 1
#     def test_b(self, a, b):
#         print('\n')
#         print(f"data --> a: {a}")
#         print(f"data --> b: {b}")
#         assert 1
#
# if __name__ == '__main__':
#     pytest.main(['-s', '-v', __file__])  # 加上 -m 控制需要运行的标签用例


## 多个装饰器
"""
这种用法, 主要是为了进行组合运行

被多个装饰器装饰时, 运行次数等于: m * n
"""

import pytest
import allure

# 模拟文件内容, 将文件内容按行拆分
fileData1 = [
    1,
    2,
    3
]

fileData2 = [
    2,
    3
]

class TestCase():

    @pytest.mark.parametrize('a', fileData1)
    @pytest.mark.parametrize('b', fileData2)
    def test_a(self, a, b):
        print('')
        print(f"data --> a: {a}")
        print(f"data --> b: {b}")
        print(f"a({a}) ** b{b}: {a ** b}")

if __name__ == '__main__':
    pytest.main(['-s', '-v', __file__])  # 加上 -m 控制需要运行的标签用例